תגיד את זה פעם אחת ורק פעם אחת
TL;DR: הימנע מאימות דוא"ל כפול.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-x-i7r34uj
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvi
קוד ריח 20 - אופטימיזציה מוקדמת
זהה היכן משוכפל לוגיקת אימות הדוא"ל.
צור מחלקה Email Address
כדי לכלול כללי אימות.
קוד מחדש להשתמש במחלקה Email Address
במקום מחרוזות גולמיות.
public class Person { private String emailAddress; // Primitive Obsession public void setEmailAddress(String emailAddress) { // Duplicated code if (!emailAddress.matches( "^[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) { throw new IllegalArgumentException( "Invalid email address format"); } this.emailAddress = emailAddress; } } public class JobApplication { private String applicantEmailAddress; public void setApplicantEmailAddress(String emailAddress) { // Duplicated code if (!emailAddress.matches( "^[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) { throw new IllegalArgumentException( "Invalid email address format"); } this.applicantEmailAddress = emailAddress; } }
public class EmailAddress { // 2. Create an `EmailAddress` class to encapsulate validation rules. private final String value; public EmailAddress(String value) { // The rules are in a single place // And all objects are created valid if (!value.matches("^[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) { throw new IllegalArgumentException( "Invalid email address format"); } this.value = value; } } public class Person { private final EmailAddress emailAddress; public Person(EmailAddress emailAddress) { // 1. Identify where email validation logic is duplicated. // 3. Refactor code to use the `Email Address` // class instead of raw strings. // No validation is required this.emailAddress = emailAddress; } } public class JobApplication { private EmailAddress applicantEmailAddress; public JobApplication(EmailAddress applicantEmailAddress) { this.applicantEmailAddress = applicantEmailAddress; } }
שינוי זה בטוח אם תחליף את כל המופעים של מחרוזות דוא"ל גולמיות במחלקה 'כתובת אימייל' ותוודא שכל הבדיקות עוברות.
אתה הופך את אימות הדוא"ל לעקבי בכל היישום שלך.
מכיוון שכללי האימות מרוכזים במקום אחד, הקוד נעשה קל יותר לתחזוקה.
אתה גם מפחית את הסיכון לבאגים הנגרמים מהיגיון לא עקבי.
בעולם האמיתי, Email Addresses
הן אובייקטים קטנים שקיימים ואינם מחרוזות.
הקוד המחודש קרוב יותר ל- MAPPER בעולם האמיתי.
שים לב ששמות חילוף חיוניים. זה יעזור ליצור EmailAddress
, לא Email
, מכיוון שהמייל צריך להיות מיפוי להודעה בפועל.
אל תתנו לאופטימיזציית מוקדמים לומר לכם שלפתרון הזה יש עונש ביצועים.
הם אף פעם לא עושים מדדים אמיתיים עם נתונים מהעולם האמיתי.
ללא הוראות מתאימות | עם הוראות ספציפיות |
---|---|
תמונה מאת גרד אלטמן ב- Pixabay
מאמר זה הוא חלק מסדרת Refactoring.